package com.t3go.t3_map.utils;

import com.shareware.common.utils.LogExtKt;
import com.t3go.passenger.base.utils.CastUtils;
import com.t3go.passenger.base.utils.EmptyUtils;
import com.t3map.api.map.model.T3LatLng;

import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;

/**
 * 数据转换工具类，将GIS服务器下发的数据，转换为本地使用的 实体类对象
 */
public class MapDataUtil {

    private static final String TAG = "GisDataUtil";

    /**
     * 解析GIS的路况数据
     *
     * @param originalData 原始数据
     * @return 解析后数据
     */
    public static TreeMap<Integer, Integer> parseTrafficLevel(String originalData) {
        return parseTrafficLevel(0, originalData);
    }

    /**
     * 解析GIS的路况数据
     *
     * @param originalData 原始数据
     * @return 解析后数据
     */
    public static TreeMap<Integer, Integer> parseTrafficLevel(int offset, String originalData) {
        TreeMap<Integer, Integer> result = new TreeMap<>();
        if (EmptyUtils.isEmpty(originalData)) {
            return result;
        }
        String[] temp = originalData.split(";");
        for (String s : temp) {
            if (null != s) {
                String[] item = s.split("-");
                if (item.length != 2) {
                    LogExtKt.log(TAG, " route data lng or lat has something wrong, check! data is " + s);
                } else {
                    result.put(offset + CastUtils.castInt(item[0]), CastUtils.castInt(item[1]));
                }
            }
        }
        LogExtKt.log(TAG, "parse data done, and the wrong data number is " + (result.size() - temp.length));
        return result;
    }

    /**
     * 解析gis路线经纬度数据
     *
     * @param originalData 原始数据
     * @return 解析后数据
     */
    public static List<T3LatLng> parseLngLat(String originalData) {
        List<T3LatLng> result = new ArrayList<>();
        if (EmptyUtils.isEmpty(originalData)) {
            return result;
        }
        String[] temp = originalData.split(";");
        for (String item : temp) {
            if (null == item) {
                continue;
            }
            String[] latlng = item.split(",");
            if (latlng.length != 2) {
                LogExtKt.log(TAG, " route data lng or lat has something wrong, check! data is " + item);
            } else {
                result.add(new T3LatLng(CastUtils.castDouble(latlng[1]), CastUtils.castDouble(latlng[0])));
            }
        }
        LogExtKt.log(TAG, "parse data done, and the wrong data number is " + (result.size() - temp.length));
        return result;
    }

}
